package Model;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import javax.swing.JOptionPane;

public class ClienteDAO {

    public ArrayList<ClienteBO> lista_clientes_com_filtro(String coluna_filtro, String texto_filtro) {
        Connection conexao;
        Statement executorSQL;

        try {
            conexao = ConexaoSingleton.getInstance().getConnection();
            executorSQL = conexao.createStatement();

            String SQL = "select * from tb_cliente where " + coluna_filtro
                    + " like '%" + texto_filtro + "%';";

            ResultSet resultado = executorSQL.executeQuery(SQL);
            ArrayList<ClienteBO> lista = new ArrayList<ClienteBO>();
            while (resultado.next()) {
                ClienteBO cli = new ClienteBO(resultado.getInt("nCodCliente"),
                        resultado.getString("sNomeRazaoSocial"),
                        resultado.getString("sCpfCnpj"),
                        resultado.getString("sRg"),
                        resultado.getString("sEndereco"),
                        resultado.getString("sTelefone"),
                        resultado.getString("sCelular"),
                        resultado.getString("sEmail"),
                        resultado.getString("sCidade"),
                        resultado.getString("sEstado"),
                        resultado.getInt("nCep"),
                        resultado.getInt("nFlSituacao"));
                lista.add(cli);
            }
            executorSQL.close();
            return lista;
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "ClientesDAO.lista_clientes-Erro: " + e.getMessage());
            return new ArrayList<ClienteBO>();
        }
    }

    public ArrayList<ClienteBO> lista_clientes() {
        Connection conexao;
        Statement executorSQL;

        try {

            conexao = ConexaoSingleton.getInstance().getConnection();
            executorSQL = conexao.createStatement();

            String SQL = "select * from tb_cliente;";
            ResultSet resultado = executorSQL.executeQuery(SQL);
            ArrayList<ClienteBO> lista = new ArrayList<ClienteBO>();
            while (resultado.next()) {
                ClienteBO cli = new ClienteBO(resultado.getInt("nCodCliente"),
                        resultado.getString("sNomeRazaoSocial"),
                        resultado.getString("sCpfCnpj"),
                        resultado.getString("sRg"),
                        resultado.getString("sEndereco"),
                        resultado.getString("sTelefone"),
                        resultado.getString("sCelular"),
                        resultado.getString("sEmail"),
                        resultado.getString("sCidade"),
                        resultado.getString("sEndereco"),
                        resultado.getInt("nCep"),
                        resultado.getInt("nFlSituacao"));
                lista.add(cli);
            }
            executorSQL.close();
            return lista;
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "ClientesDAO.lista_clientes-Erro: " + e.getMessage());
            return new ArrayList<ClienteBO>();
        }
    }

    public boolean insere_cliente(ClienteBO cli) {
        Connection conexao;
        Statement executorSQL;
        try {
            conexao = ConexaoSingleton.getInstance().getConnection();
            executorSQL = conexao.createStatement();
            String SQL = "insert into tb_cliente (sNomeRazaoSocial,sCpfCnpj,sRg,sEndereco,sTelefone,sCelular,sEmail,sCidade,sEstado,nCep,nFlSituacao) "
                    + "values('" + cli.getsNomeRazaoSocial() + "','"
                    + cli.getsCpfCnpj() + "','"
                    + cli.getsRg() + "','"
                    + cli.getsEndereco() + "','"
                    + cli.getsTelefone() + "','"
                    + cli.getsCelular() + "','"
                    + cli.getsEmail() + "','"
                    + cli.getsCidade() + "','"
                    + cli.getsEstado() + "',"
                    + cli.getnCep() + ",1);";
            System.out.println("Comando SQL: " + SQL);
            executorSQL.execute(SQL);
            executorSQL.close();
            return true;
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Insira todos os Dados obrigatorios.");
            return false;
        }

    }

    public boolean atualiza_cliente(ClienteBO cli) {
        Connection conexao;
        Statement executorSQL;

        try {
            conexao = ConexaoSingleton.getInstance().getConnection();
            executorSQL = conexao.createStatement();

            String SQL = "update tb_cliente set sNomeRazaoSocial='" + cli.getsNomeRazaoSocial()
                    + "', sTelefone='" + cli.getsTelefone()
                    + "', sCidade='" + cli.getsCidade()
                    + "', sCpfCnpj='" + cli.getsCpfCnpj()
                    + "',sEmail='" + cli.getsEmail()
                    + "',sEndereco='" + cli.getsEndereco()
                    + "',sRg='" + cli.getsRg()
                    + "',sCelular='" + cli.getsCelular()
                    + "',nCep=" + cli.getnCep()
                    + ",nFlSituacao=" + cli.getnFlSituacao()
                    + " where nCodCliente = " + cli.getnCodCliente() + ";";

            System.out.println("Comando SQL: " + SQL);
            boolean resultado = executorSQL.execute(SQL);

            executorSQL.close();
            return resultado;
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Insira todos os Dados obrigatorios.");
            return false;
        }
    }
}
